home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2000 February / Macworld (2000-02).dmg / Shareware World / Fonts / SmallerFontSmoothing / Other stuff / Original Hack Email.txt next >
Internet Message Format  |  1999-11-06  |  6KB

  1. Date: Mon, 11 Oct 1999 22:05:26 -0500
  2. To: ACM@UIUC's Mac Warriors
  3. From: Steven Bytnar <sbytnar@kagi.com>
  4. Subject: Hacking SetThemeFontSmoothing
  5.  
  6. Rick mentioned on Sunday at the ACM Conference that he wanted to change the minimum font smoothing size. I took it as a challenge. Consider this a tutorial of how you can use Macsbug to do some really cool stuff.
  7.  
  8. Be careful. I haven't fully tested this hack yet, and it requires you to follow along and apply the ideas I present... numbers and code listed here are NOT absolute. You will most likely have to formulate these numbers by yourself.
  9.  
  10. Remember, this is my documentary of how this was accomplished, not the exact steps you need to take!!! Read the last part of it to see what you essentially need to change.
  11.  
  12. What did it take for me to figure this out?
  13. ResEdit
  14. Macsbug
  15. PEF Viewer
  16. HexEdit
  17. 30 minutes of running around in Macsbug and
  18. 20 minutes to write this in a coherent fashion, and verify the steps I took.
  19.  
  20. What shareware tools would have helped?
  21. The Fragmanalyzer ($25)  (disassembly of the AppearanceLib fragment from the "System" context.)
  22. MacNosy to disassemble any cfrg.
  23. Resourcerer to take apart extended 'cfrgs' and maybe to do the data fork editing.
  24.  
  25. How did I start?
  26. I opened the Appearance control panel in ResEdit.
  27. I remembered that I had tried hacking it before by just changing the MENU resource that lists all the values you can enter, so I didn't take that path.
  28. I then disassembled AppearanceLib (using PEF Viewer) and found a global symbol named SetThemeFontSmoothing in the Imports list of the Loader Section.
  29. I dropped into Macsbug.
  30. "tvb SetThemeFontSmoothing"
  31.  TVector Break at “SetThemeFontSmoothing” (TVector at 0050285C) every time 
  32. "wh ."
  33.  Address 0050285C is in the System heap at 00002800 
  34.  It is 00000B8C bytes into this heap block: 
  35.      Start    Length      Tag  Mstr Ptr Lock Prg  Type   ID   File      Name 
  36.   • 00501CD0 0000C92C+08   N                      
  37. "dm ."
  38.  Displaying memory from 050285c 
  39.   0050285C  3655 1F6C 0050 9CD0  3655 1EAC 0050 9CD0  6U•l•Pú–6U•¨•Pú– 
  40.   0050286C  3655 1D70 0050 9CD0  3655 1CD4 0050 9CD0  6U•p•Pú–6U•‘•Pú– 
  41. "g"   ...hack to reality...
  42.  
  43. I ran the Appearance control panel.
  44. Opened AppleScript.
  45. Opened the Appearance control panel's dictionary.
  46. Made the script:
  47.     tell application "Appearance"
  48.         set minimum font smoothing size to 11
  49.     end tell
  50. Ran it.
  51. Macsbug enters:
  52.  
  53.   PowerPC TVector break at 36551F6C SetThemeFontSmoothing 
  54.  
  55.          I noticed PowerPC register 4 was 0000000b (11 decimal).
  56.          This makes sense since the MacOS Application Binary Interface states that parameter passage is done in registers r3, r4 and r5, (any others come on the stack).
  57.          So I listed the code.
  58.  
  59. "ilp SetThemeFontSmoothing" (hit return a few times to see more of the disassembly.)
  60.  
  61. <  INSERT MACSBUG DISASSEMBLY HERE, if I actually disassembled it. ;)  >
  62. < I will not repost any code I saw, just some opcodes that are interesting >
  63. < since it's against the license agreement to disassemble any part of MacOS. >
  64.  
  65. You might see that r4 is stored in 0x006E+SP.
  66. Later, you might see that 0x006E+SP is compared against 0x000C:
  67.  cmplwi     r0,0x000C   | 2800000C
  68.  
  69. BINGO. That's the limit. 12 decimal (0c hexadecimal) is the current minimum.
  70.  
  71.  
  72. "wh SetThemeFontSmoothing"
  73.  Address 36551FAC is in VM file-mapped logical memory space 
  74.  It is in the CFM fragment “AppearanceLib” at 3654DAB0 
  75.  It is 000044FC bytes from the start of the fragment 
  76.   and 00000A9C bytes into a non-writeable code section at 36551510 
  77.  
  78. Well. Now we just need to find out where AppearanceLib is stored at on disk so we can change it permanently.
  79.  
  80. This is the tough part.
  81.  
  82. I looked in the extension folder. Doh! 8.6 no longer has an "Appearance Extension". If you want to hack 8.5 or any earlier system, things are immensely easier because you can edit the "Appearance Extension"... much easier than hacking 8.6's System file's 4MB data fork.... where almost all Toolbox APIs are stored.
  83.  
  84. Open ResEdit.
  85. Open the System file.
  86. Check out the 'cfrg's.
  87. 'cfrg' 49 contains: (you might have to search through all of the 'cfrg' resources to find it.)
  88. Member 11:
  89. arch: ppc
  90. ...
  91. Where: 1
  92. Offset: 2464432
  93. Length: 315821
  94. Member Size: 56
  95. Member Name: AppearanceLib
  96.  
  97. This means, AppearanceLib is located in the data fork of the System file at offset 2464432.
  98.  
  99. Open HexEdit.
  100. Open A COPY OF the System file.
  101. Goto Offset 2464432 decimal.
  102. You should see:
  103. Joy!peffpwpc....
  104.  
  105. Now, we need to do a search for our code snippet above since the offsets Macsbug sees are not accurate in practice.
  106.  
  107. Find Hex: (Note these are the hex code for the three instructions that do the cmplwi...0x000C, blt, cmplwi...0x0018)
  108. 2800000C 4180000C 28000018 
  109.  
  110. Modify the 2800000C to be whatever minimum you'd like. Be careful as the scaling algorithm MIGHT not be able to handle small sizes!!! If you haven't figured it out by now, 2800xxxx is the opcode where xxxx can be any 4 digit value you'd like to compare against.
  111.  
  112. Save your changes.
  113.  
  114. Put your current System file in the trash. This unblesses your System Folder.
  115.  
  116. Move or copy the modified one into your System Folder to rebless it.
  117.  
  118. Reboot.
  119.  
  120. Enjoy.
  121.  
  122. Have any other challenges? :)
  123.  
  124. --Steve, who needs to be enrolled in hackers anonymous
  125.  
  126.  
  127.  
  128.  
  129. Date: Tue, 26 Oct 1999 18:05:09 -0500
  130. From: Rick Roe
  131. Subject: Re: Hacking SetThemeFontSmoothing
  132. To: ACM@UIUC's Mac Warriors
  133.  
  134. I just successfully applied this hack on Mac OS 9... it runs fine with the
  135. minimum size set to 9 point.
  136.  
  137. Only difference from Steve's exploratory surgery is that the offset of
  138. AppearanceLib in the system file is 2471952 under OS 9.
  139.  
  140. Also, something that Steve didn't point out: this hack allows you to set the
  141. minimum size below 12, but it doesn't allow you to edit the number below 12 in
  142. the Appearance control panel. Looks like that'd be a separate hack. :) You can,
  143. however, use this snippet of applescript to do the deed:
  144.  
  145. tell application "Appearance" to set minimum font smoothing size to 9
  146.  
  147. Incidentally, there's no longer a memory leak from opening and closing the
  148. Appearance CP in OS 9, so AppleScripts that pop into it just to change a setting
  149. and then quit are much more useful.
  150.  
  151. --Rick Roe
  152.